import java.util.ArrayList;
import java.util.ListIterator;




public class Laberinto {
	
	private Posicion inicioFantasmas;
	private Posicion inicioPacman;
	private Posicion[][] posiciones;
	private Pacman miPacman;
	private ArrayList<Fantasma> listaFantasmas;
	private int limiteX;
	private int limiteY;
	
	public Laberinto() {
		CreadorDeLaberintos creadorLaberintos= new CreadorDeLaberintos();
		BuilderLaberintoXML builderUsado= new BuilderLaberintoXML();
		creadorLaberintos.setBuilder(builderUsado);
		creadorLaberintos.construirLaberinto();
		posiciones= creadorLaberintos.getMatrizLaberinto();
		this.limiteX= creadorLaberintos.getAltoLaberinto();
		this.limiteY= creadorLaberintos.getAnchoLaberinto();
		this.inicioFantasmas= creadorLaberintos.getInicioFantasma();
		this.inicioPacman= creadorLaberintos.getInicioPacman();
		
		CreadorDeFantasmas creadorFantasmas=new CreadorDeFantasmas();
		creadorFantasmas.setBuilder(builderUsado);
		creadorFantasmas.construirFantasmas();
		this.listaFantasmas= creadorFantasmas.getFantasmas();
		this.miPacman= creadorFantasmas.getPacman();
		
		ListIterator<Fantasma> it=this.listaFantasmas.listIterator();
		Fantasma f=it.next();
		 f=it.next();
		
		 if (Config.debug) {
			System.out.println("ESTADO: "+f.getCurrentState().toString()+"; VELOCIDAD: "+f.getCurrentState().getVelocidad());
		 }
		
	}


	public void setPosicionInicialFantasmas(Posicion inicioFantasmas) {
		this.inicioFantasmas= inicioFantasmas;
	}
	
	public Posicion getPosicion(int x,int y){
		return this.posiciones[x][y];
	}


	public void setPosicionInicialPacman(Posicion inicioPacman) {
		this.inicioPacman=inicioPacman;
	}


	public Posicion[][] getMatriz() {
		// TODO Auto-generated method stub
		return this.posiciones;
	}



	public void imprimirLaberinto() {
		
		int pacX = miPacman.enDondeEstoy().getX();
		int pacY = miPacman.enDondeEstoy().getY();
		
		int fanX = listaFantasmas.get(0).enDondeEstoy().getX();
		int fanY = listaFantasmas.get(0).enDondeEstoy().getY();
		
		int fan2X = listaFantasmas.get(1).enDondeEstoy().getX();
		int fan2Y = listaFantasmas.get(1).enDondeEstoy().getY();
		
		int fan3X = listaFantasmas.get(2).enDondeEstoy().getX();
		int fan3Y = listaFantasmas.get(2).enDondeEstoy().getY();
		
		int fan4X = listaFantasmas.get(3).enDondeEstoy().getX();
		int fan4Y = listaFantasmas.get(3).enDondeEstoy().getY();
		
		for( int i=0 ; i < limiteX ; i++ ) {
			for( int j=0 ; j < limiteY ; j++ ) {
				Posicion p= this.posiciones[i][j];
				if ( (pacX == i) && (pacY == j) ) {
					System.out.print("|P|");
				} else {
					if ( (fanX == i) && (fanY == j) ) {
						System.out.print("|a|");
					} else {
						if ( (fan2X == i) && (fan2Y == j) ) {
							System.out.print("|b|");
						} else {
							if ( (fan3X == i) && (fan3Y == j) ) {
								System.out.print("|c|");
							} 
						else {
							if ( (fan4X == i) && (fan4Y == j) ) {
							System.out.print("|d|");
							}else {if (p!=null){
								if ( p.queComidaTengo().equals("bolita") ) {
									System.out.print("|.|");
								} else {
										if (p.queComidaTengo().equals("bolon") ) {
										System.out.print("|*|");
							} else {
								System.out.print("|_|");
							}
						}
							}
					}
				}
			}
					}
					}
		}
		System.out.println("");
	}
		System.out.println("");
		System.out.println("");
	}
	
	public ArrayList<Fantasma> getFantasmas() {
		return listaFantasmas;
	}
	
	public Pacman getPacman() {
		return miPacman;
	}
	
	public Posicion getInicioFantasmas() {
		return inicioFantasmas;
	}
	
	public Posicion getInicioPacman() {
		return inicioPacman;
	}
	

	public int getLimiteAlto() {
		return this.limiteX;
	}
	
	public int getLimiteAncho() {
		return this.limiteY;
	}
}
